#!/bin/bash
export PATH="/usr/bin:/bin:/usr/sbin:/sbin:$PATH"
DIR="$(cd "$(dirname "$0")/../Resources" && pwd)"
PARENT_DIR="$(cd "$(dirname "$0")/../../.." 2>/dev/null && pwd)"
if [ -n "$PARENT_DIR" ]; then
  /usr/bin/xattr -cr "$PARENT_DIR" 2>/dev/null || true
fi

RUNTIME_DIR="$HOME/.codex/gui_runtime"
mkdir -p "$RUNTIME_DIR" "$HOME/Library/LaunchAgents"
cp -f "$DIR/ui.html" "$RUNTIME_DIR/ui.html"
cp -f "$DIR/worker.sh" "$RUNTIME_DIR/worker.sh"
cp -f "$DIR/server.pl" "$RUNTIME_DIR/server.pl"
chmod +x "$RUNTIME_DIR/worker.sh" "$RUNTIME_DIR/server.pl" 2>/dev/null || true
/usr/bin/xattr -cr "$RUNTIME_DIR" 2>/dev/null || true

PLIST="$HOME/Library/LaunchAgents/com.letiango.codex.gui.plist"
/bin/launchctl unload "$PLIST" 2>/dev/null || true
/usr/bin/pkill -9 -f "server.pl" 2>/dev/null || true
/usr/sbin/lsof -ti:17892 | /usr/bin/xargs kill -9 2>/dev/null || true
sleep 0.2

cat > "$PLIST" <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.letiango.codex.gui</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/perl</string>
        <string>${RUNTIME_DIR}/server.pl</string>
        <string>${RUNTIME_DIR}/ui.html</string>
        <string>${RUNTIME_DIR}/worker.sh</string>
        <string>--fg</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StandardInPath</key>
    <string>/dev/null</string>
    <key>StandardOutPath</key>
    <string>/dev/null</string>
    <key>StandardErrorPath</key>
    <string>/dev/null</string>
</dict>
</plist>
EOF

/bin/launchctl load -w "$PLIST" 2>/dev/null || /usr/bin/perl "$RUNTIME_DIR/server.pl" "$RUNTIME_DIR/ui.html" "$RUNTIME_DIR/worker.sh"
for i in 1 2 3 4 5 6; do
  if /usr/sbin/lsof -ti:17892 >/dev/null 2>&1; then
    break
  fi
  sleep 0.15
done
if ! /usr/sbin/lsof -ti:17892 >/dev/null 2>&1; then
  /usr/bin/perl "$RUNTIME_DIR/server.pl" "$RUNTIME_DIR/ui.html" "$RUNTIME_DIR/worker.sh"
  sleep 0.3
fi

/usr/bin/open "http://127.0.0.1:17892/?v=$(date +%s)"
exit 0
